package core

import (
	"fmt"
	"gvb-server/global"
	"log"
	"os"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

func HysglConnect() *gorm.DB {

	if global.Config.Mysql.DBHost == "" {
		// log.Println("未配置mysql，取消gorm连接")
		return nil
	}

	dsn := global.Config.Mysql.Dsn()

	var mysqlLogger logger.Interface

	var LogMode logger.LogLevel
	if global.Config.System.Env == "debug" {
		LogMode = logger.Info
	} else {
		LogMode = logger.Error // 只打印错误信息
	}

	// 控制台输出 和 sql语句
	mysqlLogger = logger.New(
		log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer（日志输出的目标，前缀和日志包含的内容——译者注）
		logger.Config{
			SlowThreshold:             time.Second, // 慢 SQL 阈值
			LogLevel:                  LogMode,     // 日志级别
			IgnoreRecordNotFoundError: true,        // 忽略ErrRecordNotFound（记录未找到）错误
			Colorful:                  true,        // 使用用彩色打印
		},
	)

	//global,MysgLog = logger DefaultLogMode(logger .Info
	DB, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: mysqlLogger,
	})

	if err != nil {
		log.Fatalf(fmt.Sprintf("[%s] mysgl连接失败:", dsn))
		panic(err)
	}

	sqlDB, _ := DB.DB()
	sqlDB.SetMaxIdleConns(10)  // 最大空闲连接
	sqlDB.SetMaxOpenConns(100) // 最多连接

	sqlDB.SetConnMaxLifetime(time.Hour * 4) // 连接最大用时间，不能超过mysg的wait_tineout
	return DB
}
